home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / qrymod / d_view.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  2.0 KB  |  109 lines

  1. # include    <ingres.h>
  2. # include    <aux.h>
  3. # include    <tree.h>
  4. # include    <symbol.h>
  5. # include    <catalog.h>
  6. # include    <pv.h>
  7. # include    <func.h>
  8. # include    "qrymod.h"
  9. # include    <sccs.h>
  10.  
  11. SCCSID(@(#)d_view.c    8.1    12/31/84)
  12.  
  13.  
  14.  
  15. /*
  16. **  D_VIEW -- define view
  17. **
  18. **    This procedure connects the tree in with the relation catalog
  19. **    and inserts the view tree into the tree catalog.
  20. **
  21. **    The information in the pipe is expected to come as follows:
  22. **        create for view, with S_VIEW bit set so that a
  23. **            physical relation is not created.
  24. **        define tree, which will put the translation tree
  25. **            into the 'tree' catalog.
  26. **        define view, which will connect the two together.
  27. **            The first two absolutely must be done before
  28. **            this step can be called.
  29. **
  30. **    Parameters:
  31. **        none
  32. **
  33. **    Returns:
  34. **        none
  35. **
  36. **    Side Effects:
  37. **        I/O in 'tree' catalog.
  38. **
  39. **    Trace Flags:
  40. **        39
  41. */
  42.  
  43. extern DESC    Reldes;
  44.  
  45. extern        d_view(), null_fn();
  46. extern short    tTqm[80];
  47.  
  48. struct fn_def    DefViewFn =
  49. {
  50.     "DVIEW",
  51.     d_view,
  52.     null_fn,
  53.     null_fn,
  54.     NULL,
  55.     0,
  56.     tTqm,
  57.     80,
  58.     'Q',
  59.     0
  60. };
  61.  
  62.  
  63.  
  64.  
  65. d_view(pc, pv)
  66. int    pc;
  67. PARM    *pv;
  68. {
  69.     char        viewid[MAXNAME + 1];
  70.     struct relation    relkey, reltup;
  71.     register QTREE    *t;
  72.     register int    i;
  73.     struct tup_id    tid;
  74.     int        treeid;
  75.  
  76.     /*
  77.     **  Read parameters.
  78.     */
  79.  
  80.     if (pv->pv_type != PV_STR)
  81.         syserr("d_view: viewid");
  82.     pmove(pv->pv_val.pv_str, viewid, MAXNAME, ' ');
  83.     pv++;
  84.  
  85.     if (pv->pv_type != PV_QTREE)
  86.         syserr("d_view: tree");
  87.     t = (QTREE *) pv->pv_val.pv_qtree;
  88.     pv++;
  89.     
  90. #    ifdef xQTR3
  91.     /* do some extra validation */
  92.     if (Qt.qt_qmode != mdVIEW)
  93.         syserr("d_view: Qt.qt_qmode %d", Qt.qt_qmode);
  94.     if (Qt.qt_resvar < 0)
  95.         syserr("d_view: Rv %d", Qt.qt_resvar);
  96.     if (Qt.qt_rangev[Qt.qt_resvar].rngvdesc == NULL ||
  97.         !bequal(Qt.qt_rangev[Qt.qt_resvar].rngvdesc->reldum.relid, viewid, MAXNAME))
  98.         syserr("d_view: rangev %d %.14s", Qt.qt_rangev[Qt.qt_resvar].rngvdesc,
  99.             Qt.qt_rangev[Qt.qt_resvar].rngvdesc->reldum.relid);
  100. #    endif
  101.  
  102.     declare(Qt.qt_resvar, NULL);
  103.     Qt.qt_resvar = -1;
  104.     Qt.qt_qmode = -1;
  105.  
  106.     /* output tree to tree catalog */
  107.     treeid = puttree(t, viewid, Usercode, mdVIEW);
  108. }
  109.